#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Size 5;    //顺序表元素的个数
typedef  struct Table{
    int *head;
    int length;
    int size;
}Table;
//初始化顺序表
Table initTable(){
    Table t;   //结构体变量体t;
    t.head = malloc(5*sizeof (int));
    //判断开辟空间是否成功
    if(!t.head){
        printf("初始化失败:\n");
        exit(0);
    }
    t.length = 0;
    t.size= 5;
    return t;
}

//打印显示顺序表函数displayTable
void displayTable(Table t){
    for(int i=0;i<t.length;i++){
        printf("%d",t.head[i]);
    }
    printf("\n");
}

//删除元素的方法delTable
Table delTable(Table t,int num){
    //t代表函数调用时传进来的顺序表，num代表要删除的那个数的位置（第几个数）
    if(num>t.length||num<1){
        printf("被删除的元素位置有问题\n");
        return t;
    }
    //当删除元素没有问题的时候执行下面代码
    for (int i = num; i <t.length; ++i) {
        t.head[i-1]=t.head[i];
    }
    t.length--;
    return t;
}

Table cruTable(Table t,int sum ,int num){
    //t代表函数调用时传进来的顺序表，num代表要插入的那个数的位置（第几个数）
    if(num>t.length||num<1){
        printf("被删除的元素位置有问题\n");
        return t;
    }
    if(t.length>t.size){
        //扩容
        t.head= realloc(t.head,(t.size+1)*sizeof (int));
        if(!t.head){
            printf("空间分配失败\n");
        }
        //空间容量size+1
        t.size++;
    }
    //循环遍历，从第num-1个位置开始，逐个往后移动一位。
    for(int i=t.length-1;i>=num-1;i--){
        t.head[i+1]=t.head[i];
    }
    t.head[num-1]=sum;
    t.length++;
    return t;
}

//查找
int chaTable(Table t,int num){
    for(int i=0;i<t.length;i++){
        if(t.head[i]==num){
            return i;
        }
    }
}

//修改
Table  xuTable(Table t,int sum,int num){
    for(int i=0;i<t.length;i++){
        if(sum==t.head[i]){
            t.head[i] = num;
        }
    }
    return t;
}
int main(){
    Table t1 = initTable();
    for(int i=0;i<5;i++){
        t1.head[i]=i;
        t1.length++;
    }
    printf("打印原顺序表：\n");
    //打印原顺序表
    displayTable(t1);
    //删除元素
    printf("删除元素为：\n");
    t1 = delTable(t1,3);
    displayTable(t1);
    //在第二个元素位置拆入元素5
    printf("在第二个元素位置拆入元素5：\n");
    t1= cruTable(t1,5,3);
    displayTable(t1);

    //查找元素
    printf("查找元素3的位置:\n");
    int add = chaTable(t1,3);
    printf("%d\n",add);

    //修改
    printf("修改元素3的位置\n");
    t1 = xuTable(t1,3,7);
    displayTable(t1);
    return 0;
}
